home *** CD-ROM | disk | FTP | other *** search
/ Aminet 46 / Aminet 46 (2001)(GTI - Schatztruhe)[!][Dec 2001].iso / Aminet / text / edit / edt10src.lha / txt / EIcon.mod < prev    next >
Text File  |  1995-04-08  |  7KB  |  256 lines

  1. (*
  2.   .name       EIcon
  3.   .task       Icon creation
  4.   .release    1.0
  5.   .language   Oberon-2
  6.   .translator Amiga Oberon 3.11
  7.   .system     AmigaOS 2.04/2.1/3.0
  8.   .author     Joachim Barheine
  9.   .address    Hochgrevestraße 3, D-38640 Goslar
  10.   .copyright  (c) 1994 by Joachim Barheine
  11. *)
  12.  
  13. (* .info: 21/08/94, 13:25:21, version 21 *)
  14.  
  15. MODULE EIcon; (* $DataChip+ *)
  16.  
  17. IMPORT
  18.   SYS:= SYSTEM,
  19.  
  20.   Dos,
  21.   EArgs,
  22.   Err:= ErrCodes,
  23.   Exec,
  24.   I:= Intuition,
  25.   Icon,
  26.   K:= Kernel,
  27.   S:= Strings,
  28.   Wb:= Workbench;
  29.  
  30. TYPE
  31.   LinePtr* = UNTRACED POINTER TO ARRAY 128 OF CHAR;
  32.   Tooltypes* = UNTRACED POINTER TO ARRAY 4096 OF LinePtr;
  33.  
  34.   ChipData= ARRAY 2 * 8 * 11 OF INTEGER;
  35.  
  36. CONST
  37.   edtPrivTooltype* = "(EDT PRIVATE DATA: DO NOT MODIFY)";
  38.   foldTooltype* = "FOLDER=";
  39.   positionTooltype* = "POSITION=";
  40.  
  41.   imageData= ChipData(
  42.   (* Plane 0 *)
  43.     00000U,00000U,00000U,00400U,00000U,00000U,00000U,00C00U,
  44.     00000U,00000U,00000U,00C00U,007FFU,0FFFFU,0FFE0U,00C00U,
  45.     00400U,00000U,00030U,00C00U,004FEU,00000U,00028U,00C00U,
  46.     00400U,00000U,00024U,00C00U,004FEU,00000U,00022U,00C00U,
  47.     00400U,00000U,0003FU,00C00U,00400U,00000U,00000U,08C00U,
  48.     00403U,0BFDFU,0BF80U,08C00U,00400U,00000U,00000U,08C00U,
  49.     004FFU,077FBU,0FF80U,08C00U,00400U,00000U,00000U,08C00U,
  50.     004FFU,0FFFEU,0FF80U,08C00U,00400U,00000U,00000U,08C00U,
  51.     00400U,00000U,07F80U,08C00U,00400U,00000U,00000U,08C00U,
  52.     007FFU,0FFFFU,0FFFFU,08C00U,00000U,00000U,00000U,00C00U,
  53.     00000U,00000U,00000U,00C00U,07FFFU,0FFFFU,0FFFFU,0FC00U,
  54.  
  55.   (* Plane 1 *)
  56.     0FFFFU,0FFFFU,0FFFFU,0F800U,0D555U,05555U,05555U,05000U,
  57.     0D555U,05555U,05555U,05000U,0D000U,00000U,00015U,05000U,
  58.     0D3FFU,0FFFFU,0FFC5U,05000U,0D301U,0FFFFU,0FFD5U,05000U,
  59.     0D3FFU,0FFFFU,0FFD9U,05000U,0D301U,0FFFFU,0FFDDU,05000U,
  60.     0D3FFU,0FFFFU,0FFC0U,05000U,0D3FFU,0FFFFU,0FFFFU,05000U,
  61.     0D3FCU,04020U,0407FU,05000U,0D3FFU,0FFFFU,0FFFFU,05000U,
  62.     0D300U,08804U,0007FU,05000U,0D3FFU,0FFFFU,0FFFFU,05000U,
  63.     0D300U,00001U,0007FU,05000U,0D3FFU,0FFFFU,0FFFFU,05000U,
  64.     0D3FFU,0FFFFU,0807FU,05000U,0D3FFU,0FFFFU,0FFFFU,05000U,
  65.     0D000U,00000U,00000U,05000U,0D555U,05555U,05555U,05000U,
  66.     0D555U,05555U,05555U,05000U,08000U,00000U,00000U,00000U
  67.   );
  68.  
  69.   image= I.Image(
  70.       0, 0,                       (* Upper left corner *)
  71.       54, 22, 2,                  (* Width, Height, Depth *)
  72.       SYS.ADR(imageData),         (* Image data *)
  73.       SHORTSET{0, 1}, SHORTSET{}, (* PlanePick, PlaneOnOff *)
  74.       NIL                         (* Next image *)
  75.   );
  76.  
  77.   gadget= I.Gadget(
  78.     NIL,                                (* Next Gadget Pointer *)
  79.     0, 0, 54, 22,                       (* Left, Top, Width, Height *)
  80.     {I.gadgImage} + Wb.gadgBackFill,    (* Flags *)
  81.     {I.relVerify, I.gadgImmediate},     (* Activation Flags *)
  82.     I.boolGadget,                       (* Gadget Type *)
  83.     SYS.ADR(image),                     (* Render Image *)
  84.     NIL,                                (* Select Image *)
  85.     NIL,                                (* Gadget Text *)
  86.     LONGSET{},                          (* Mutual Exclude *)
  87.     NIL,                                (* Special Info *)
  88.     0,                                  (* Gadget ID *)
  89.     1                                   (* User Data (Revision) *)
  90.   );
  91.  
  92. VAR
  93.   icon: Wb.DiskObject;
  94.   toolName: Exec.STRPTR;
  95.  
  96. PROCEDURE GetTooltypes* (name: ARRAY OF CHAR; VAR dobj: Wb.DiskObjectPtr): Tooltypes;
  97.  
  98. (* $CopyArrays- *)
  99.  
  100. BEGIN
  101.   dobj:= Icon.GetDiskObject(name);
  102.   IF dobj = NIL THEN
  103.     RETURN NIL;
  104.   ELSIF dobj.toolTypes = NIL THEN
  105.     Icon.FreeDiskObject(dobj); dobj:= NIL;
  106.     RETURN NIL;
  107.   ELSE
  108.     RETURN SYS.VAL(Tooltypes, dobj.toolTypes);
  109.   END;
  110. END GetTooltypes;
  111.  
  112. PROCEDURE FreeTooltypes* (dobj: Wb.DiskObjectPtr; VAR tt: Tooltypes);
  113.  
  114. VAR
  115.   i: INTEGER;
  116.  
  117. BEGIN
  118.   IF dobj = NIL THEN
  119.     i:= 0;
  120.     WHILE tt[i] # NIL DO
  121.       DISPOSE(tt[i]);
  122.       INC(i);
  123.     END;
  124.     DISPOSE(tt);
  125.   ELSE
  126.     Icon.FreeDiskObject(dobj);
  127.   END;
  128. END FreeTooltypes;
  129.  
  130. PROCEDURE InitTooltypes* (tt: Tooltypes; name: ARRAY OF CHAR);
  131.  
  132. VAR
  133.   dobj: Wb.DiskObjectPtr;
  134.   tt0: Tooltypes;
  135.   i0, i: INTEGER;
  136.  
  137.   PROCEDURE IsTT(tooltype, str: ARRAY OF CHAR): BOOLEAN;
  138.  
  139.   VAR
  140.     i: INTEGER;
  141.  
  142.   (* $CopyArrays- *)
  143.  
  144.   BEGIN
  145.     FOR i:= 0 TO SHORT(LEN(tooltype))-2 DO
  146.       IF tooltype[i] # str[i] THEN RETURN FALSE END;
  147.     END;
  148.     RETURN TRUE;
  149.   END IsTT;
  150.  
  151. (* $CopyArrays- *)
  152.  
  153. BEGIN
  154.   i0:= 0; i:= 0;
  155.   tt0:= GetTooltypes(name, dobj);
  156.   IF tt0 # NIL THEN
  157.     WHILE tt0[i0] # NIL DO
  158.       IF (tt0[i0]^ # edtPrivTooltype) & ~IsTT(foldTooltype, tt0[i0]^)
  159.         & ~IsTT(positionTooltype, tt0[i0]^) THEN
  160.         NEW(tt[i]);
  161.         COPY(tt0[i0]^, tt[i]^);
  162.         INC(i);
  163.       END;
  164.       INC(i0);
  165.     END;
  166.     FreeTooltypes(dobj, tt0);
  167.   END;
  168.   tt[i]:= NIL;
  169. END InitTooltypes;
  170.  
  171. PROCEDURE EqTT(a, b: Tooltypes): BOOLEAN;
  172.  
  173. VAR
  174.   i: INTEGER;
  175.  
  176. BEGIN
  177.   IF (a # NIL) & (b # NIL) THEN
  178.     i:= 0;
  179.     WHILE (a[i] # NIL) & (b[i] # NIL) & (a[i]^ = b[i]^) DO INC(i) END;
  180.     RETURN a[i]=b[i];   (* both NIL? *)
  181.   ELSE
  182.     RETURN a=b;
  183.   END;
  184. END EqTT;
  185.  
  186. (* $IF M2Amiga THEN *)
  187.  
  188. PROCEDURE PutIcon* (name: ARRAY OF CHAR; tt: Tooltypes);
  189.  
  190. VAR
  191.   dobj: Wb.DiskObjectPtr;
  192.   old: Exec.APTR;
  193.  
  194. (* $CopyArrays- *)
  195.  
  196. BEGIN
  197.   dobj:= Icon.GetDiskObject(name);
  198.   IF dobj = NIL THEN
  199.     dobj:= Icon.GetDiskObject("M2:Icons/txt");
  200.     IF dobj = NIL THEN
  201.       icon.toolTypes:= tt;
  202.       K.Assert(Icon.PutDiskObject(name, SYS.ADR(icon)), Err.eIconNoIcon);
  203.       RETURN;
  204.     END;
  205.   END;
  206.   old:= dobj.toolTypes;
  207.   IF ~EqTT(tt, SYS.VAL(Tooltypes, old)) THEN
  208.     dobj.toolTypes:= tt;
  209.     K.Assert(Icon.PutDiskObject(name, dobj), Err.eIconNoIcon);
  210.   END;
  211.   dobj.toolTypes:= old;
  212.   Icon.FreeDiskObject(dobj);
  213. END PutIcon;
  214.  
  215. (* $ELSE *)
  216.  
  217. PROCEDURE PutIcon* (name: ARRAY OF CHAR; tt: Tooltypes);
  218.  
  219. VAR
  220.   dobj: Wb.DiskObjectPtr;
  221.   old: Exec.APTR;
  222.  
  223. (* $CopyArrays- *)
  224.  
  225. BEGIN
  226.   dobj:= Icon.GetDiskObject(name);
  227.   IF dobj = NIL THEN
  228.     icon.toolTypes:= tt;
  229.     K.Assert(Icon.PutDiskObject(name, SYS.ADR(icon)), Err.eIconNoIcon);
  230.     RETURN;
  231.   ELSIF ~EqTT(tt, SYS.VAL(Tooltypes, dobj.toolTypes)) THEN
  232.     old:= dobj.toolTypes;
  233.     dobj.toolTypes:= tt;
  234.     K.Assert(Icon.PutDiskObject(name, dobj), Err.eIconNoIcon);
  235.     dobj.toolTypes:= old;
  236.   END;
  237.   Icon.FreeDiskObject(dobj);
  238. END PutIcon;
  239.  
  240. (* $END *)
  241.  
  242. BEGIN
  243.   NEW(toolName);
  244.   COPY(EArgs.edt, toolName^);
  245.   icon.magic:= Wb.diskMagic;
  246.   icon.version:= Wb.diskVersion;
  247.   icon.gadget:= gadget;
  248.   icon.type:= Wb.project;
  249.   icon.defaultTool:= SYS.ADR(toolName^);
  250.   icon.toolTypes:= NIL;
  251.   icon.currentX:= Wb.noIconPosition;
  252.   icon.currentY:= Wb.noIconPosition;
  253.   icon.drawerData:= NIL;
  254.   icon.toolWindow:= NIL;
  255.   icon.stackSize:= 8192;
  256. END EIcon.